package com.cskaoyan.demo4.servlet;

import com.cskaoyan.demo4.util.JacksonUtil;
import lombok.SneakyThrows;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;


/**
 * 请求体：
 *     1、没有内容（通常是GET请求的时候）
 *     2、字符数据(通常是POST请求) → 字符流
 *     (2.1) key=value形式的请求参数(目前这个场景也不多)
 *     (2.2) JSON字符串(目前的主流)
 *     3、字节数据(文件上传场景) → 字节流 todo: → 讲完请求体 专门讲请求参数
 * 使用Postman来构造请求
 */
@WebServlet("/admin/goods/*")
public class AdminGoodsServlet extends CommonServlet{
    public void create(HttpServletRequest request, HttpServletResponse response){
        // 获得字节流 → 使用字节流来处理请求体中的内容
        // 如果你当前想要使用字节流 也行 → 使用字节流加载 文本数据
        try {
            ServletInputStream inputStream = request.getInputStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @SneakyThrows
    // key=value形式的请求参数（POST请求的form表单）
    public void create2(HttpServletRequest request,HttpServletResponse response){
        // 获得字符流 → 使用字符流来处理请求体中的内容
        BufferedReader reader = request.getReader();
        String str = reader.readLine();
        System.out.println(str);
    }


    // JSON字符串
    @SneakyThrows
    public void create3(HttpServletRequest request, HttpServletResponse response) {
        // 获得字符流 → 使用字符流来处理请求体中的内容
        String jsonStr = request.getReader().readLine();
        System.out.println(jsonStr);

        //使用Jackson将json字符串转换为实例
        Map map= JacksonUtil.read(jsonStr, Map.class);
        String username = (String) map.get("username");
        String password = (String) map.get("password");
        System.out.println(map);
        System.out.println(username);
        System.out.println(password);
    }
}
